/**
 * 分页组件 JS 库
 * 版本: 1.0.0
 * 作者: 系统开发团队
 * 描述: 通用分页组件，支持多页面复用
 */

// 分页组件全局配置
var PaginationConfig = {
    currentPage: 1,
    totalPages: 1,
    containerId: 'pager'
};

/**
 * 分页组件核心渲染函数
 * @param {number} pageNo - 当前页码
 * @param {number} pageTotal - 总页数
 * @param {string} containerId - 容器ID，可选，默认为pager
 */
function renderPagination(pageNo, pageTotal, containerId) {
    containerId = containerId || PaginationConfig.containerId;
    var pager = document.getElementById(containerId);
    if (!pager) {
        console.error('分页容器未找到: ' + containerId);
        return;
    }
    
    // 如果没有传入参数，使用默认值
    if (typeof pageNo === 'undefined') pageNo = 1;
    if (typeof pageTotal === 'undefined') pageTotal = 1;
    
    // 更新全局配置
    PaginationConfig.currentPage = pageNo;
    PaginationConfig.totalPages = pageTotal;
    PaginationConfig.containerId = containerId;
    
    var html = '';
    
    // 上一页
    if (pageNo > 1) {
        html += '<span class="pager_btn" onclick="goToPage(' + (pageNo - 1) + ')">&lt;</span>';
    } else {
        html += '<span class="pager_btn" style="opacity: 0.5; cursor: not-allowed;">&lt;</span>';
    }
    
    // 页码显示逻辑
    var startPage = Math.max(1, pageNo - 2);
    var endPage = Math.min(pageTotal, pageNo + 2);
    
    // 显示第一页
    if (startPage > 1) {
        html += '<span class="pager_btn" onclick="goToPage(1)">1</span>';
        if (startPage > 2) {
            html += '<span style="opacity: 0.5; cursor: not-allowed;">...</span>';
        }
    }
    
    // 显示中间页码
    for (var i = startPage; i <= endPage; i++) {
        if (i === pageNo) {
            html += '<span class="pager_btn" style="background: #1677FF; color: white;">' + i + '</span>';
        } else {
            html += '<span class="pager_btn" onclick="goToPage(' + i + ')">' + i + '</span>';
        }
    }
    
    // 显示最后一页
    if (endPage < pageTotal) {
        if (endPage < pageTotal - 1) {
            html += '<span style="opacity: 0.5; cursor: not-allowed;">...</span>';
        }
        html += '<span class="pager_btn" onclick="goToPage(' + pageTotal + ')">' + pageTotal + '</span>';
    }
    
    // 下一页
    if (pageNo < pageTotal) {
        html += '<span class="pager_btn" onclick="goToPage(' + (pageNo + 1) + ')">&gt;</span>';
    } else {
        html += '<span class="pager_btn" style="opacity: 0.5; cursor: not-allowed;">&gt;</span>';
    }
    
    // 跳转输入框
    html += '<span>前往</span>';
    html += '<span class="pager_input"><input type="text" value="' + pageNo + '" onkeypress="handlePageJump(event, ' + pageTotal + ')"/></span>';
    html += '<span>页</span>';
    
    pager.innerHTML = html;
}

/**
 * 全局暴露的页面跳转函数
 * @param {number} page - 目标页码
 */
function goToPage(page) {
    var totalPages = PaginationConfig.totalPages;
    
    // 页码有效性检查
    if (page < 1 || page > totalPages) {
        console.warn('页码超出范围: ' + page + ', 有效范围: 1-' + totalPages);
        return;
    }
    
    // 重新渲染分页组件
    renderPagination(page, totalPages, PaginationConfig.containerId);
    
    // 触发自定义事件，供外部监听
    var event = new CustomEvent('pageChange', {
        detail: {
            currentPage: page,
            totalPages: totalPages
        }
    });
    document.dispatchEvent(event);
    
    console.log('跳转到第' + page + '页');
}

/**
 * 全局暴露的输入框跳转处理函数
 * @param {Event} event - 键盘事件
 * @param {number} totalPages - 总页数
 */
function handlePageJump(event, totalPages) {
    if (event.key === 'Enter') {
        var page = parseInt(event.target.value);
        
        if (isNaN(page) || page < 1 || page > totalPages) {
            // 恢复当前页码
            event.target.value = PaginationConfig.currentPage;
            alert('请输入有效的页码（1-' + totalPages + '）');
            return;
        }
        
        goToPage(page);
    }
}

/**
 * 获取当前页码
 * @returns {number} 当前页码
 */
function getCurrentPageNo() {
    return PaginationConfig.currentPage;
}

/**
 * 获取总页数
 * @returns {number} 总页数
 */
function getTotalPages() {
    return PaginationConfig.totalPages;
}

/**
 * 设置分页配置
 * @param {Object} config - 配置对象
 * @param {number} config.currentPage - 当前页码
 * @param {number} config.totalPages - 总页数
 * @param {string} config.containerId - 容器ID
 */
function setPaginationConfig(config) {
    if (config.currentPage) PaginationConfig.currentPage = config.currentPage;
    if (config.totalPages) PaginationConfig.totalPages = config.totalPages;
    if (config.containerId) PaginationConfig.containerId = config.containerId;
}

// 暴露到全局作用域（供外部调用）
if (typeof window !== 'undefined') {
    window.PaginationAPI = {
        renderPagination: renderPagination,
        goToPage: goToPage,
        handlePageJump: handlePageJump,
        getCurrentPageNo: getCurrentPageNo,
        getTotalPages: getTotalPages,
        setPaginationConfig: setPaginationConfig
    };
}